﻿using System;
using System.Windows.Forms;
using VentaElectrodomesticos.Sql;
using VentaElectrodomesticos.Utilities;
using VentaElectrodomesticos.Facturacion;
using System.Data.SqlClient;

namespace VentaElectrodomesticos.AbmProducto
{
    public partial class FormSeleccionProducto : Form
    {
        private ClaseSQL sql = new ClaseSQL();
        private Form formReceptor;
        private String tipoFormReceptor;
        private KeyValuePair unaCategoria;
        private int idSucursal;
        private bool mostrarDeshabilitados;

        public FormSeleccionProducto(Form _formReceptor, String _tipoFormReceptor, bool mostrarDeshabilitados)
        {
            InitializeComponent();
            this.formReceptor = _formReceptor;
            this.tipoFormReceptor = _tipoFormReceptor;
            this.mostrarDeshabilitados = mostrarDeshabilitados;

            if (tipoFormReceptor.Equals("modificacion"))
            {
                this.Text = "Formulario de seleccion de productos a modificar";
                this.seleccionar.HeaderText = "Seleccionar";
                this.seleccionar.Text = "Seleccionar";
                this.seleccionar.UseColumnTextForButtonValue = true;
            }
            else if (tipoFormReceptor.Equals("baja"))
            {
                this.Text = "Formulario de baja de productos";
                this.seleccionar.HeaderText = "Eliminar";
                this.seleccionar.Text = "Eliminar";
                this.seleccionar.UseColumnTextForButtonValue = true;
            }

        }

        //Este constructor es para cuando es facturacion, porque en los otros casos no se pasa idSucursal
        public FormSeleccionProducto(Form _formReceptor, String _tipoFormReceptor, int _idSucursal)
        {
            InitializeComponent();
            this.formReceptor = _formReceptor;
            this.tipoFormReceptor = _tipoFormReceptor;
            this.idSucursal = _idSucursal;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                dataGridView1.Rows.Clear();
                sql.Open();

                String condiciones = "";
                condiciones += Utils.agregarCondicionExacta(condiciones, "idProducto", tbCodProducto.Text, true);
                condiciones += Utils.agregarCondicion(condiciones, "nomProducto", tbNombre.Text);
                condiciones += Utils.agregarCondicion(condiciones, "marca", tbMarca.Text);
                condiciones += Utils.agregarCondicionConKeyValue(condiciones, "prod.idCategoria", unaCategoria);

                if (!tbDesde.Text.Equals("") && !tbHasta.Text.Equals(""))
                {
                    condiciones += Utils.agregarCondicionBetween(condiciones, "precio", tbDesde.Text, tbHasta.Text);
                }
                else
                {
                    condiciones += Utils.agregarCondicion(condiciones, "precio", tbDesde.Text, " >= ", null);
                    condiciones += Utils.agregarCondicion(condiciones, "precio", tbHasta.Text, " <= ", null);
                }
                if (!mostrarDeshabilitados)
                {
                    condiciones += Utils.agregarCondicionExacta(condiciones, "status", "1", false);
                }


                String query = "SELECT idProducto, nomProducto, descProducto, marca, nomCategoria, precio, prod.status, prod.idCategoria FROM LAG.productos prod LEFT JOIN LAG.productos_categorias cat ON prod.idCategoria = cat.idCategoria" + condiciones;

                SqlDataReader reader = sql.busquedaSQLDataReader(query);
                while (reader.Read())
                {

                    dataGridView1.Rows.Add(
                        reader["idProducto"],
                        reader["nomProducto"].ToString(),
                        reader["descProducto"].ToString(),
                        reader["marca"].ToString(),
                        reader["nomCategoria"].ToString(),
                        reader["precio"],
                        reader["status"],
                        reader["idCategoria"]
                    );
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error al buscar producto");
            }
            finally
            {
                sql.Close();
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            Utils.ClearTextBoxes(this);
            dataGridView1.Rows.Clear();
            unaCategoria = null;
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // Ignorar clicks que no son en la columna seleccionar 
            if (e.RowIndex < 0 || e.ColumnIndex != dataGridView1.Columns["seleccionar"].Index) return;

            Producto producto = new Producto(dataGridView1.Rows[e.RowIndex]);

            if (tipoFormReceptor.Equals("modificacion"))
            {
                FormModificacionProducto formEdicionProducto = new FormModificacionProducto(producto);
                formEdicionProducto.ShowDialog(this);
            }
            else if (tipoFormReceptor.Equals("baja"))
            {
                sql.bajaRegistro("LAG.productos", "idProducto", dataGridView1.Rows[e.RowIndex].Cells["codProducto"].Value.ToString());
            }
            else if (tipoFormReceptor.Equals("facturacion"))
            {
                FormFacturacion formFacturacion = (FormFacturacion)formReceptor;
                FormValidadorDeStock valStock = new FormValidadorDeStock(formFacturacion, producto, idSucursal);
                valStock.ShowDialog();

                this.Close();
            }
        }

        private void btnCategoria_Click(object sender, EventArgs e)
        {
            FormSeleccionCategoria formCategoria = new FormSeleccionCategoria(this, "seleccionProducto");
            formCategoria.ShowDialog();
        }

        public void recibirCategoria(KeyValuePair _categoria)
        {
            this.tbCategoria.Text = _categoria.Value.ToString();
            this.unaCategoria = _categoria;
        }

        private void ingresarSoloNumericosConComa(object sender, KeyPressEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"\u0008|,|[0-9]+"))
                e.Handled = true;
        }

        private void ingresarSoloNumericos(object sender, KeyPressEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "[0-9\b]+"))
                e.Handled = true;
        }

        
    }
}
